package Test_0808;

/**
 * Created with Intellij IDEA
 * Description:
 * User: 星辰
 * Dare: 2024-08-08

 */
public  class Outclass {
    public  int a=2;
     static int k;
    public void eat(){
        k=3;
        System.out.println("吃东西");
    }
    public static void fun2(){
        System.out.println("....");
    }
    //在外部类中
    //静态内部类
    static class InnerClass{
        public int b=1;
        private int c=2;
        final int f=5;
        static final int g=6;
        public void fun(){
            /*可以直接直接访问外部类的静态成员*/
            k=3;//直接访问成员变量
            Outclass.fun2();//直接访问成员方法
           /*不可以直接访问外部类的非静态成员*/
            //a=3; 报错，不可以直接访问外部类的非静态成员
            //但可以实例化外部类，在进行对非静态成员的访问
            Outclass outclass1 =new Outclass();
            System.out.println(outclass1.a);
            outclass1.eat();
            System.out.println("....");
        }
        //构造
        public InnerClass(){

        }
    }
}
class Outclass1 {
    //实例内部类
    public class Innerclass1{

    }
    //静态内部类
    static class Innerclass2{

    }
    public void fun() {
        //局部内部类：几乎不用
        class Innerclass3 {

        }
    }
}
 class Outclass3 {
    public  int a=2;
    private static int b=3;
    public int c=1;
    public void fun1(){
        InnerClass1 inner1=new InnerClass1();
        System.out.println(inner1.h);
    }

     //实例化内部类
        public class InnerClass1{
        public int h=1;
        public int c=3;
        public void fun(){
            //实例化内部类中，可以直接访问成员，无论静态非静态
            System.out.println(a);//2
            System.out.println(b);//3
           fun1();
            //如果实例内部类的变量与外部类中的相同，访问相同变量，
            // 优先访问实例内部类中的变量
            System.out.println(c);//3
            //如何在外部类和内部类相同变量的情况下访问外部变量？
            //1.实例化外部类，通过 类名. 访问
            Outclass3 out=new Outclass3();
            System.out.println(out.c);
            //2.直接 外部类.this. 访问
            System.out.println(Outclass3.this.c);
        }
    }
    }
